{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "import matplotlib. pyplot as plt\n",
    "import pandas as pd\n",
    "from sklearn. preprocessing import MinMaxScaler\n",
    "from keras.models import Sequential\n",
    "from keras.layers import Dense, LSTM, SimpleRNN\n",
    "import keras\n",
    "import numpy as np\n",
    "\n",
    "#解决中文显示问题\n",
    "plt. rcParams['font.sans-serif'] = ['SimHei']\n",
    "plt. rcParams['axes.unicode_minus'] = False"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "#加载数据\n",
    "dataset=pd.read_csv('load.csv',index_col=[0])#index_col指定某列作为索引列\n",
    "dataset=dataset.fillna(method='pad')\n",
    "print(dataset)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "dataset=np.array(dataset)#希望数据能够成一列\n",
    "print(dataset)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "a = []\n",
    "for item in dataset:\n",
    "    for i in item:\n",
    "        a. append(i)\n",
    "print(a)\n",
    "dataset = pd. DataFrame(a)#方便数据截取\n",
    "print(dataset)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "#划分训练集和验证集\n",
    "train = dataset. iloc[0: int(len(a)*0.8), [0]]\n",
    "val = dataset.iloc[int(len(a)*0.8):int(len(a)*0.9), [0]]\n",
    "print(train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "#数据的归一化\n",
    "scaler = MinMaxScaler(feature_range=(0,1))\n",
    "train = scaler. fit_transform(train)\n",
    "val = scaler. fit_transform(val)\n",
    "print(val)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "#一天又96个数据，一共96个时间步\n",
    "x_train=[]\n",
    "y_train=[]\n",
    "for i in np.arange(96, len(train)):\n",
    "    x_train.append(train[i-96:i, :])\n",
    "    y_train.append(train[i])\n",
    "print(x_train)\n",
    "#转化为列表\n",
    "x_train, y_train = np. array(x_train), np. array(y_train)\n",
    "print(x_train)\n",
    "print(x_train.shape)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "x_val=[]\n",
    "y_val=[]\n",
    "for i in np.arange(96, len(val)):\n",
    "    x_val.append(val[i-96:i, :])\n",
    "    y_val.append(val[i])\n",
    "#转化为列表\n",
    "x_val, y_val= np. array(x_val), np. array(y_val)\n",
    "print(x_val)\n",
    "print(x_val.shape)\n",
    "print(y_val.shape)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epoch 1/30\n",
      "55/55 [==============================] - 7s 94ms/step - loss: 0.0343 - val_loss: 0.0167\n",
      "Epoch 2/30\n",
      "55/55 [==============================] - 3s 62ms/step - loss: 0.0039 - val_loss: 0.0067\n",
      "Epoch 3/30\n",
      "55/55 [==============================] - 3s 59ms/step - loss: 0.0017 - val_loss: 0.0038\n",
      "Epoch 4/30\n",
      "55/55 [==============================] - 3s 61ms/step - loss: 0.0013 - val_loss: 0.0028\n",
      "Epoch 5/30\n",
      "55/55 [==============================] - 4s 64ms/step - loss: 8.3671e-04 - val_loss: 0.0017\n",
      "Epoch 6/30\n",
      "55/55 [==============================] - 3s 59ms/step - loss: 6.8305e-04 - val_loss: 0.0014\n",
      "Epoch 7/30\n",
      "55/55 [==============================] - 3s 61ms/step - loss: 5.5042e-04 - val_loss: 0.0011\n",
      "Epoch 8/30\n",
      "55/55 [==============================] - 3s 61ms/step - loss: 4.4849e-04 - val_loss: 8.8534e-04\n",
      "Epoch 9/30\n",
      "55/55 [==============================] - 3s 61ms/step - loss: 4.2635e-04 - val_loss: 8.2703e-04\n",
      "Epoch 10/30\n",
      "55/55 [==============================] - 3s 61ms/step - loss: 3.7218e-04 - val_loss: 8.3655e-04\n",
      "Epoch 11/30\n",
      "55/55 [==============================] - 4s 64ms/step - loss: 3.8476e-04 - val_loss: 8.5036e-04\n",
      "Epoch 12/30\n",
      "55/55 [==============================] - 4s 64ms/step - loss: 2.9603e-04 - val_loss: 6.8558e-04\n",
      "Epoch 13/30\n",
      "55/55 [==============================] - 3s 60ms/step - loss: 2.7918e-04 - val_loss: 6.0738e-04\n",
      "Epoch 14/30\n",
      "55/55 [==============================] - 3s 62ms/step - loss: 2.7529e-04 - val_loss: 5.6327e-04\n",
      "Epoch 15/30\n",
      "55/55 [==============================] - 3s 60ms/step - loss: 2.5864e-04 - val_loss: 5.6901e-04\n",
      "Epoch 16/30\n",
      "55/55 [==============================] - 3s 62ms/step - loss: 2.8746e-04 - val_loss: 5.6227e-04\n",
      "Epoch 17/30\n",
      "55/55 [==============================] - 3s 61ms/step - loss: 2.5591e-04 - val_loss: 5.3225e-04\n",
      "Epoch 18/30\n",
      "55/55 [==============================] - 3s 59ms/step - loss: 2.3402e-04 - val_loss: 5.7874e-04\n",
      "Epoch 19/30\n",
      "55/55 [==============================] - 3s 59ms/step - loss: 2.4671e-04 - val_loss: 8.4526e-04\n",
      "Epoch 20/30\n",
      "55/55 [==============================] - 3s 59ms/step - loss: 2.6542e-04 - val_loss: 4.9938e-04\n",
      "Epoch 21/30\n",
      "55/55 [==============================] - 3s 60ms/step - loss: 2.6068e-04 - val_loss: 5.2228e-04\n",
      "Epoch 22/30\n",
      "55/55 [==============================] - 3s 62ms/step - loss: 2.4798e-04 - val_loss: 4.7906e-04\n",
      "Epoch 23/30\n",
      "55/55 [==============================] - 3s 61ms/step - loss: 2.1673e-04 - val_loss: 4.6630e-04\n",
      "Epoch 24/30\n",
      "55/55 [==============================] - 3s 60ms/step - loss: 2.0837e-04 - val_loss: 4.5893e-04\n",
      "Epoch 25/30\n",
      "55/55 [==============================] - 3s 61ms/step - loss: 2.3221e-04 - val_loss: 5.0836e-04\n",
      "Epoch 26/30\n",
      "55/55 [==============================] - 3s 61ms/step - loss: 2.3704e-04 - val_loss: 5.0580e-04\n",
      "Epoch 27/30\n",
      "55/55 [==============================] - 3s 60ms/step - loss: 2.0378e-04 - val_loss: 4.5276e-04\n",
      "Epoch 28/30\n",
      "55/55 [==============================] - 3s 61ms/step - loss: 2.1746e-04 - val_loss: 6.7771e-04\n",
      "Epoch 29/30\n",
      "55/55 [==============================] - 3s 61ms/step - loss: 2.2209e-04 - val_loss: 4.4415e-04\n",
      "Epoch 30/30\n",
      "55/55 [==============================] - 3s 62ms/step - loss: 1.9654e-04 - val_loss: 4.3983e-04\n"
     ]
    },
    {
     "ename": "KeyError",
     "evalue": "' loss'",
     "output_type": "error",
     "traceback": [
      "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[1;31mKeyError\u001b[0m                                  Traceback (most recent call last)",
      "Cell \u001b[1;32mIn[19], line 21\u001b[0m\n\u001b[0;32m     19\u001b[0m plt\u001b[38;5;241m.\u001b[39m figure(figsize\u001b[38;5;241m=\u001b[39m(\u001b[38;5;241m12\u001b[39m, \u001b[38;5;241m8\u001b[39m))\n\u001b[0;32m     20\u001b[0m \u001b[38;5;66;03m#传入训练集的 loss和验证集的 Loss\u001b[39;00m\n\u001b[1;32m---> 21\u001b[0m plt\u001b[38;5;241m.\u001b[39m plot(\u001b[43mhistory\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m \u001b[49m\u001b[43mhistory\u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43m loss\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m]\u001b[49m, label\u001b[38;5;241m=\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124m train\u001b[39m\u001b[38;5;124m'\u001b[39m)\n\u001b[0;32m     22\u001b[0m plt\u001b[38;5;241m.\u001b[39m plot(history\u001b[38;5;241m.\u001b[39m history[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124m val loss\u001b[39m\u001b[38;5;124m'\u001b[39m], Label\u001b[38;5;241m=\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124m val\u001b[39m\u001b[38;5;124m'\u001b[39m)\n\u001b[0;32m     23\u001b[0m \u001b[38;5;66;03m#设置图的参数，设置图的名字\u001b[39;00m\n",
      "\u001b[1;31mKeyError\u001b[0m: ' loss'"
     ]
    },
    {
     "data": {
      "text/plain": [
       "<Figure size 1200x800 with 0 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "#搭建网络\n",
    "model=Sequential()\n",
    "model.add(LSTM(10,return_sequences=True,activation='relu'))#SimpleRNN（）是rnn神经网络。输入下一层神经网络，返回次序为true\n",
    "model.add(LSTM(15,return_sequences=False,activation='relu'))#要输入全连接层，返回次序为false\n",
    "model.add(Dense(10,activation='relu'))\n",
    "model.add(Dense(1))\n",
    "\n",
    "#编译网络\n",
    "model.compile(optimizer=keras.optimizers.Adam(0.01), loss='mse')#优化器找最优的w\n",
    "\n",
    "#网络训练\n",
    "history=model.fit(x_train,y_train,batch_size=512,epochs=30,validation_data=(x_val,y_val))\n",
    "\n",
    "#模型保存\n",
    "model.save('LSTM_model.h5')\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\ZTC\\AppData\\Local\\Temp\\ipykernel_3328\\3201656599.py:6: MatplotlibDeprecationWarning: Case-insensitive properties were deprecated in 3.3 and support will be removed two minor releases later\n",
      "  plt. plot(history. history['val_loss'], Label=' val')\n"
     ]
    },
    {
     "data": {
      "image/png": "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xx9/rHHjxqlNmzYXnas7S0tL04wZMyRJXbp0kSSFhITIbDYrJSVFycnJjuUgvr6+Sk5Odjyys7MVERFR7PILAID3YhkCAABXkL00/sIP8wMGDFB2dna5O9B36dJFSUlJ2rp1q3r27KnffvtN/v7+6tixo9LT0x3X3X333Y7nhw4dUlJSku666y7VqFGj0HUXc375f35+voYPH67Dhw/r+++/16lTp3Ts2DFNnjxZrVu31htvvOG4NjU1VTfddJP27dsnHx8f3XfffXrnnXfUqFGjEu/VoEEDPfvss/rHP/6hH3/8UX5+fsrOztZ9992nAQMGaPv27dq7d6/WrVungoICDR8+vNhxdu7cqdGjR+vee+9VfHy8du7cqY8++kh/+9vftGXLFi1evFhvv/22+vXrp0aNGumuu+7S3Llzdc8996hDhw565plnSvWzcUcFBQUaNmyYsrKyipybPn26Xn755ULHXn31Vb366quO7//xj3/oxRdfrPB5AgDcCxExAABXUJcuXVS1alWtWLFCDz30kI4cOSLJ9gE8NDS03A3kAgIC1LRpU/3222+SbGFE06ZNL9rR/vHHH1d+fr4mT54sSY6/HH/99deaM2eO5syZo+PHj2vv3r2O7/fs2VPoL8xHjx7V4sWLdeLECcXGxio0NFRxcXE6ceKEPvnkE0cDwaVLl6pTp046fvy4Vq5cqZ9//ll//vmn2rRpoxdffFFWq7XEeY4bN07t2rXTww8/rM8//1yhoaHq37+/3nzzTVksFk2bNk0rVqxQRESEbrrppmLHGD16tI4ePap3331XJpNJzZs3l4+Pj1566SXdf//9euWVV3T//fcrJiZGr7zyilauXKlWrVrJ19dX//vf/4rsmlAeP//8s66//nqFhISoWrVqGjx4sP74448i16Wnp2v48OGqV6+egoOD1bx5c82cOVPGBRtYGYahV199Va1bt1ZoaKhq166toUOH6s8//yx03ZNPPqlvv/222IaZ9veVk5MjwzCKPAIDA53y3gEAnofKAgAArqDq1atrzpw5GjJkiN566y198MEHuv/++zV16lRFR0df1titW7cutAyhdevWJVYLLF26VPPmzdPdd9+tq666SpIczQfP/6uyZPvwum7dukLvwa5mzZp699135e/vr7p16+rHH3/UxIkTNWfOHDVp0kTfffednn/+eX3zzTe6+uqrtWjRItWtW1eStHHjRg0ePFgTJ07UokWLNG/ePLVo0aLIXH19ffXqq6/qmmuu0c6dO3XHHXcoODhY7du31wMPPKC33npLkZGRGjBgQIlhy7hx4/S3v/1NnTt31uHDh3XzzTdr5MiRjqqGhx9+2HGtYRjy8fHRyZMn9de//vWSSyVK44svvtAtt9yiKlWqaNCgQTKbzVq4cKG+/fZb/fzzz46tI/Pz89WrVy/t2LFDAwYMUP369bVx40b94x//kNVq1cSJEx1j/utf/9LkyZPVpk0bPfTQQzp+/LgWLlyoX3/9VVu2bJGvr69ycnL0f//3f4qOjtYbb7yhxMTEIj9bSRcNBFh+AACVlMu6JQAA4EVUygaHdtu2bTNuvvlmw8fHx5BkhIeHG8uXLy/x+ks1OOzevbsxY8YMo0qVKobFYjGCgoKM5557zujevXuRef36669GeHi4Icm46667jIEDBxoFBQXGb7/9Zkgyli1b5ri2ZcuWxpAhQxzf33PPPUb16tWLncfBgweN6OhoY/z48YZhGEZ2drbRvn17o0qVKsbzzz/vaKR3vvz8fOPhhx8u0rDw/AaHdrfeemuR+aWnpxtVqlQxJBnff/+9YRjnGvUV1+DQMAwjMTHRiIyMNI4dO1boeFJSknH99dcbkow2bdoYd955pyHJqF69uvH0008baWlpxY5nGBdvcHj69GmjRo0aRmhoqLFr1y7H8SVLlhiSjISEBMexX375xZBkPPDAA45jBQUFRo8ePYy//e1vhcZt27atER4eXqhJ5OzZs424uDhjz549jmM7d+401q1b5/j3nTt3ruPcE088YUgyfv31V2PHjh1FHgEBASX+HAEA3o2oGAAAF2jRooUWL16s33//XX369JHZbFa/fv20Zs2aco/ZunVr5eTk6Msvv1Rubq5at25d5Jpdu3apd+/eju8PHjyoRYsW6fXXXy9S5l4WZ86c0e233+5YViBJoaGhWrRokZYtW6ZBgwbp2LFjOnr0aKHH4cOHNW7cOP38889FtoK80MGDByXZqiLsatSoodq1a0tSqfo9LF26VCtWrNBTTz2latWqSZLeeecdde3aVZ06ddL333+vsWPHasOGDfroo4/0f//3f/L399dTTz2lunXrqmvXrvr+++/L9LNZsWKFMjIyNGLECDVp0sRx/G9/+5u6d++u77//3lEBEh0dLZPJpF27dunkyZOSbBUf33//vZYsWVJo3Bo1auj06dPatm2b49jo0aOVmppaqA9E06ZNFR8ff9E5NmnSRM2aNSvysFebAAAqH8ICAABcqHnz5vr88881fvx4Wa1WTZo0qdxj2bv1L1iwoND3dhs3btRf//pXZWVladGiRZJsH1hvvPFGvf7668rLyyvVfQoKCgp9f+rUKd12223au3evpk6dquXLl2vWrFl68MEHVa1aNd13332qV6+eYmJiFB0dXegRGxurhg0b6tSpUxe954oVK7R27Vq1bNlS77zzjmNZxNtvv629e/fKx8fH0XuhJPv379cDDzygZs2aOXY/OHLkiDZt2qS1a9eqbt26+uCDDzRixAilpKRo586datmypb744gvdfffd8vX11YYNG9S0adNS/Zzsdu3aJanov4cktW3bVpKtAaMkxcbG6uGHH9aPP/6omjVrqnv37po4caI2bNhQ5LVPPfWUAgIC1KlTJ7Vs2VLDhg3TggULZLFYyjQ/ybYMwWQyFXmUZywAgHegZwEAAFfQ6NGjtWnTJn322WeOv4hLtvXnb7zxhmP7uvKoV6+eIiIi9Mknn6hq1aqO3gB2DRo0UPv27fXss8+qVatWjuNvv/22wsPDtXfvXklSv379Cr1u27ZtjgBCksLDwwudHzJkiGMLw+uuu06SVK1aNbVq1UqBgYFatWqVfHx8FBQUpJycHNWvX1+PPvqoJk6cKIvFolOnTl20qqCgoEATJ05UmzZttHz5cjVq1EhPPPGE5s+fryeeeEIdO3ZU9+7dNXPmTC1btqzYioqcnBx17txZR44cUbVq1dShQwclJyerTp06+uGHHzR8+HA98cQTGjJkSInz+Pbbb1W1alXFxsaWeM3FlPav9C+//LIGDRqkr7/+Wps3b9abb76pF198Uc8995wef/xxx3Vdu3bV3r17tXjxYm3atEk//vij5s2bp5deekk///xzmXot/Prrr8U2w7SHGQCAyoewAACAKyg9PV3r169XcnJyobDA399fPj4+Cg4OvqzxW7durZ9++qnYD8zVq1fXt99+K0mOEndJqlOnjiQ5Kgsefvhhx1/Bn3rqKdWrV0/33XefJGnu3LnasmVLoXHvuOMO+fv7q2vXrmrTpo1atWqlGjVqOM6HhIQ4ntvvGxwcrKioqFK9p9dee01bt27V559/rtjYWP3rX/9Sv379dM899+j48eN65ZVXdNVVV+n111/XY4895gguzlelShW1bNlS1apVU5s2bdSsWTM1atRIjRo1Us2aNVWzZk0FBwerQ4cO2rhxY6HXfvzxxxo0aJBiY2PVrFmzUs35fPZKhAu3y5Tk2L3CPu7BgweVlpam9u3b6+qrr5YknThxQp07d9ZTTz2lCRMmKCAgQGfOnNHWrVtVq1YtjRw50jHexIkT9eKLL2rhwoW65557yjxXAADsCAsAALiCbrjhBi1ZskSzZs1S165dHd3o586dq1OnTql///6XNf7FwoJLsYcFvXr1Ut++fSVJs2bNUsOGDXX//fdLOtc34HyDBg3SoEGDLmPWJduxY4cmTZqkXr16qU+fPpKksWPHavTo0frmm280fvx4denSRZL09NNPy9fXV2fOnCl2rG+//bbIX/d3796tU6dOKSQkxPFvUZLy7oqQmJjo2I3gwQcfdPQT+Pzzz7Vy5UolJCQ4gqPFixdr9OjRWrx4sW6++WZJclQz7NmzR2azWVFRUbJYLIqPj1e/fv0K9TJo2bKlJDm25CwtKggAABciLAAAwEmOHTumESNGFHuub9++6tu3r4YPH653331XS5YsUceOHXXdddcpNTVVS5cuVbVq1fTMM89c1hzsFQHFrY+/lHbt2umXX35xbKUo2bYRPL/x4dSpUzV16tQSx8jIyNDmzZsdj4cffljdu3cv81zsCgoKdM011+j11193HMvLy1Pr1q117bXX6rnnnnMcf/TRRyVJqampxY518uRJ/fbbb/rll1+0YcMG/fjjj0pNTdW6desu2QDwclSpUkVz587VLbfcoo4dO+r222+X2WzWp59+qujoaL355puOawcMGKAnnnhCd911l26++WbVqlVLW7Zs0apVq3TNNdc4qjHCwsI0cOBAffzxx+rRo4c6dOigEydOaOHChQoICHAEK6WVk5NTbBjijG0jAQCeibAAAAAnOXnyZKEPfuerWbOm+vbtq6CgIH3//ff65z//qU8//VSzZ89WZGSkBg0apGnTpqlhw4aXNQd7RUFpKwvODwJCQkLUrl27QuetVqusVmuJr8/OztYjjzyi5ORk7dy5s1DlQWRkpIYPH16G2Z9jb6LYsmVLffnll4XO+fv7a8SIESUGM0ePHi1yLDMzU7GxscrNzZWPj4969Oih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mKHq1asXe7/rrrtOqampxe7U99577+nee+/Vl19+KX9/f02aNEnbtm1T7dq19fjjj+u+++675Hsty+9IaT+HumVlAQAAAADg0gzDUE6e1dXTKJMq/r4ymUwVfp+HH35Yx48fV1ZWlmbPnq1rrrnG0eQ+MjKyxNe99tprevjhh9WwYUO1bdtWwcHBhc6PGTNGb731lv7617+qd+/e+vPPPzVnzhzt3bu3UA+8svruu+/08ssvq3fv3urYsaM++OAD3X///WrevLn++te/lnvc8iIsAAAAAAAPlZNnVYsnV7h6GmWyfVqiggMq/qOofcl6amqqZs+erYSEhEs2OdyzZ48mTpyo+fPna/DgwUXOHzt2TPPmzdPVV1+t1atXy8fHtmdAXFycXnjhBf3555+qU6dOueY7c+ZMzZ49W6NGjZIk9erVS7fccouWLl1KWAD3dMebP+tItkXv39dZdSKDL/0CAAAAAPBA6enpev7554sNCiSpevXqys3NLXRs586d2rZtmyQpJSWl3GFBfHy8IyiQbGGBZNulzxUIC3BJ+46e0pFsi06czlOdkqt1AAAAAFxhVfx9tX2aZzVar+Lv6+oplCgmJkbjxo276DXZ2dl644039M0332jTpk3KzMyUr6/tPVmt5V8ScscddxT63r78wVVtBgkLcElhQX46km1Rdm6+q6cCAAAA4Dwmk+mKlPRXFs2aNSu0C9+Fjh07pg4dOig9PV39+/fXpEmTFB8fr127dumBBx64rHtfddVVl/V6Z+O3CpcUFuQvScrOzXPxTAAAAACgbOx9BZzhzTff1B9//KF58+bp7rvvdhzfunXrZY99sZDCFZz3U4PXCg+yZUpUFgAAAADwNLVq1ZKfn59SUlIKHc/PL/vnm0OHDkmSYmNjHce2bdum6dOnX94k3RCVBbikMEdYQGUBAAAAAM/i7++vO+64QwsWLJDJZFKNGjX0+++/q0uXLpo6dWqZxrr++uv16quvatiwYbr99tv1xx9/6PPPP3f0FzCbzRXxFlyCygJcUligbRnCSQuVBQAAAAA8z+uvv66HHnpIX3/9tWbNmqWdO3eqefPmZR6nf//+euuttxQaGqrXX39dv/zyix577DEtXLhQkrR48WJnT91lTIarWitCZrNZERERysrKUnh4uKunU6JnP9+uOT+l6KFrr9Kk3mX/DwoAAABA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devWqXXr1qpfv36R+/766686fvy4JOnPP/9URkaGOnXqVKa5oHT8fH0UHOArqYxNDu2a95caJ0oFedIXEyTDcPIMAQAAAMD7uVVYcPiwbdu7Nm3aFDnXsGFDZWVlKTMz02nj7du3T5JkNpuVk5NT4nWSlJKSIsm2BEGSvvzySzVo0EBBQUFq2rSppk+frjNnzpR6bihZuXZEsDOZpN4vSn5VpNTV0q8fO3l2AAAAAOD93CossO94EB0dXeRcRESEJBW7O0F5x7OPVZb7bty4UZK0bt06de/eXSNHjlRAQICmTJmiO+6446LzsVgsMpvNhR4oKqy8TQ7tIuOk6x6zPf/6Cel06QMmAAAAAICbhQV+fra/KAcHBxc5Z9+N4PTp004bzz5WWe4bEBCgxMRE7dq1S++9955mzZqlLVu2qH///lqyZIlWr15d4nyee+45RUREOB5169Yt9XupTMq1feKFuoyRoptLp49J3z7lpJkBAAAAQOXgVmGBvU9BceX8eXl5JZ4r73j242W579SpU/XVV18pJibGcY2vr69jZ4QlS5aUOJ9JkyYpKyvL8Thw4ECp30tlctmVBZLk6y/1nWV7vvl9af86J8wMAAAAACoHtwoLateuLUlKTU0tci4jI0OSVLVqVaeNZx8rPDxcoaGhl3XfJk2aSDrX26A4gYGBCg8PL/RAUZfVs+B8cV2k9nfZnn8+XrJeRvgAAAAAAJWIW4UFUVFRio2N1ebNm4uc27BhgyQV+ov+pbRt21aSShzv/LHatGlTqvuazWYdO3asyHX2xou5ubmlnh+KF+6ssECSbpgmBVeXMrZLP792+eMBAAAAQCXgVmGBJPXu3VurVq1ScnKy45jFYtHixYvVrFmzYpsQlqRx48Zq3Lix5s2b51hOIElbt27V9u3bde211zqO9enTR3v37i2yPePHH3+s8PBwtWvXTidOnFBUVJReeOGFIvdavny5JKlFixalnh+K55RlCHbB1aRetiUiWvUv6fgflz8mAAAAAHg5twsLRo8eLZPJpMGDBystLU25ubkaMWKE0tPTNXTo0DKPN3bsWCUnJ2vkyJHKyclRWlqahg8fLsMwNGTIEMd19957r8LCwnTfffdp586dslqtmjJlijZt2qSBAwfK399fVatWVadOnfTf//5Xu3btcrx2x44dmjJlikwmU6ExUT5hgbbK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FEl27NiBAQMGwGAwYPTo0YiOjsYnn3yC2tpafPPNN+pxzyU5NrqQKAddHjZv3izGjBkjBgwYIF588UVht9vD3SRqJurq6sTMmTNFenq6sFgsokuXLuLpp58WZWVl4W4aNQMN9SwQQoiysjIxdepUceONN4p7771XHD58uGkbSM1CQ9vR2rVrxXXXXSesVqtIS0sTI0eOFNu2bWv6RlLEMZvNAkDQacOGDWrZ2tpaMXv2bHHTTTeJUaNGiR07doSv4RRRQt2Ovv/+e5GVlSViY2NFcnKyyM7OFl9++WV4G08RJTc3VwwZMkS0aNFCtGzZUowZM0YcOnTIr9zFPjZizwIiIiIiIiIi0uEAh0RERERERESkw2ABEREREREREekwWEBEREREREREOgwWEBEREREREZEOgwVEREREREREpMNgARERERERERHpMFhARERERERERDoMFhAREVGDampqmvw9XS7XRV+nqKgIDofjfJukEkJccB1ERESRjsECIiIiCmrZsmXo3r078vPzL2q9q1atgsfjCZr//PPPY9iwYTh27FjIdQ4bNgxDhgwJGjSYOnUqMjIysH379ka3V2vZsmUYNGgQ1q9ff0H1EBERRTIGC4iIiCionj17AgAGDBjgd5K9YsUKzJo1CxUVFQHX3bBhA373u9+huLhYl56fn4/bbrsNd9xxR9D3/fLLL7Fv3z60bt06pHa63W5s3boVMTExMJlMfvl1dXVYt24djh8/DqvV2mBdHo8HH374YdD8L774AuvXr0diYmJIbSMiImqOGCwgIiKioHr06IF///vfiI2NRXZ2Nnbv3q3mHTx4ELNnz4bT6QQArFy5Eg899JCaX1lZiW+//dav2/77778PQL7SDwAOhwOVlZVwOp0QQqCgoAA//PADJk+eDLPZDEA+ga+trcXZs2fVHgkOhwNVVVWw2+3YsWMHKisrMX78eLV8XV0d7HY7AOCTTz5BTU0NkpKSMHny5AZ7NcyZMwd33nkn/ud//scvz263Y+3atcjOzsa1117buC+TiIioGWGwgIiIiBrUoUMHfP311zAajVi9erWaHh0drZvv2bMHb731lppvNBp1c0A+2V64cCHuuOMO9OvXDwDw1VdfITExEVFRUTAYDMjIyAAATJs2DZIkQZIkGI1GxMbGIiUlRb01YcmSJUhISIDValXruvXWW9Xy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AUePHkViYmJIn/XNN99Ebm4u3nrrLb8nKezduxdLly7F9OnTkZmZiTFjxmDx4sUYN25cSHUTERE1BwwWEBERUYOUIMD06dMhhMDQoUNx6623olevXuqTEgD97QSBTJkyBf369UPfvn0RHx+vppeXlwMAvvjiC7zyyivIy8vDmjVrdOuuWbMGubm56NevH6666ioA8i0LY8aM8Xsfq9UKs9mMESNG4Prrr0deXh7MZnPIgYKioiI888wzuOaaa/DAAw/o8srLyzF27FgkJiZiypQpSE5Oxm9/+1tMnDgRqampuuAJERFRc8bbEIiIiKhBx44dAyCfKC9duhQbN27Evn378Oijj+rK1dXV6V47nU7dPCYmBoMGDUJ0dDQ2b96MZ599FpmZmRgxYgTy8/Nxzz334JprrsFHH32kq8dgMGDx4sUwmUy46667YLfbAQCDBg3CqFGj8PLLL2P16tUoKCjAPffcg/bt2+Ozzz7Da6+9hl//+tcNfrYVK1bo2m2z2TBq1ChUVVVhwYIFuicxnDhxAgMHDkRBQQFWrlyJ5ORkAPItCampqbj11lvx5ptvhvy9EhERRTIGC4iIiKhBy5YtAyA/2rBjx46YOnUqrrrqKowfP15Xbvr06fjpp5/U1w6HQ53bbDa8/PLL+P3vf4/k5GQMGDAA//jHP9CnTx+MGTMGgwcPRlpaGtasWYO4uDgAQE1NDQA5WNCpUyf86U9/wr59+zB79mwAQHJyMj7++GM888wzGDp0KDp27AghBNxut99nCJQGAM8//zy6du2qvte3336LvLw83HXXXbjhhhvUckuXLkWvXr1w+PBhfPDBB7rbJNq2bYtvvvkGLVu2xOTJkzF8+HAcOnSocV8yERFRhOFtCERERNSg5557DkajETNnzsSJEycwatQojBs3zu9xgYmJibqu/tpggdVqxdtvv42zZ8/i7rvvxrhx49C/f38IIdCrVy8IIfDVV1/hV7/6Fd58803s2bMHq1evRnJyMmJiYgAAkyZNwt/+9jfs3r0bbrc74ACFdrtd7cmgsFqt+Pnnn/Hee+/h+uuvByAPYLhp0ybk5+dj9OjR6pMZhg4dijVr1qBHjx4AgN27d+Ohhx7C9u3b0bZtW6xZswbXXXed3/t2794d27Ztw9ixY7F69Wp8+eWXWLJkScDbJIiIiJoDSQghwt0IIiIiimxCCEiSdEF1bNq0CZmZmUhISNCl79ixAzExMeoJ+t///ndMnDgRXbp0wcyZM3H33XerZYuLi9GmTZug7zFs2DDs3LkTJSUlatrevXtx++2348cff9SVNRgMyMzMxMqVK9G+ffuA9dXU1GDgwIHo1asX5s+fj5SUlAY/o8vlwrx587B9+3asWLFCdxsDERFRc8JgAREREUUUu90Ol8ulXu0PN4fDoT79gYiI6HLBYAERERERERER6bBvHBERERERERHpMFhARERERERERDoMFhARERERERGRDoMFRERERERERKTDYAERERERERER6TBYQEREREREREQ6DBYQERERERERkQ6DBURERERERESk8/9WxsGC2vDOnwAAAABJRU5ErkJggg==",
      "text/plain": [
       "<Figure size 1200x800 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "\n",
    "##绘制训练集和测试集的 loss值对比图\n",
    "#创建一个大小为 (12,8)的画布\n",
    "plt. figure(figsize=(12, 8))\n",
    "#传入训练集的 loss和验证集的 Loss\n",
    "plt. plot(history. history['loss'], label=' train')\n",
    "plt. plot(history. history['val_loss'], Label=' val')\n",
    "#设置图的参数，设置图的名字\n",
    "plt. title(\"LSTM神经网络loss值\", fontsize=15)\n",
    "#设置 xy轴的刻度值大小\n",
    "plt. xticks(fontsize=15)\n",
    "plt. yticks(fontsize=15)\n",
    "#设置 xy轴的标签\n",
    "plt. ylabel('loss值', fontsize=15)\n",
    "plt.xlabel('训练轮次',fontsize=15)\n",
    "#设置图例文字大小\n",
    "plt.legend(fontsize=15)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "从代码来看，您正在使用 Keras 搭建一个深度学习模型，该模型包含两个 LSTM 层和两个全连接层（Dense 层）。以下是对代码的详细讲解：\n",
    "\n",
    "---\n",
    "\n",
    "### **代码解析**\n",
    "\n",
    "#### **1. 初始化模型**\n",
    "```python\n",
    "model = Sequential()\n",
    "```\n",
    "- 使用 `Sequential` 方法创建一个顺序模型。\n",
    "- `Sequential` 是 Keras 中用于构建简单线性堆叠网络的类。每一层按顺序添加到模型中。\n",
    "\n",
    "---\n",
    "\n",
    "#### **2. 第一层 LSTM**\n",
    "```python\n",
    "model.add(LSTM(10, return_sequences=True, activation='relu'))\n",
    "```\n",
    "- **LSTM**：长短期记忆网络（Long Short-Term Memory），是一种特殊的 RNN（循环神经网络），能够捕捉时间序列数据中的长期依赖关系。\n",
    "- **参数解释**：\n",
    "  - `10`：表示该层输出的单元数（即隐藏层的维度）。\n",
    "  - `return_sequences=True`：表示该层返回的是每个时间步的输出（而不是仅返回最后一个时间步的输出）。这通常用于多层 LSTM 的中间层。\n",
    "  - `activation='relu'`：指定激活函数为 ReLU（Rectified Linear Unit），ReLU 是一种常用的非线性激活函数，能够加速收敛并缓解梯度消失问题。\n",
    "\n",
    "---\n",
    "\n",
    "#### **3. 第二层 LSTM**\n",
    "```python\n",
    "model.add(LSTM(15, return_sequences=False, activation='relu'))\n",
    "```\n",
    "- 这是第二个 LSTM 层。\n",
    "- **参数解释**：\n",
    "  - `15`：该层输出的单元数为 15。\n",
    "  - `return_sequences=False`：表示该层只返回最后一个时间步的输出（默认行为）。由于这是最后一层 LSTM，因此不需要返回所有时间步的输出。\n",
    "  - `activation='relu'`：同样使用 ReLU 激活函数。\n",
    "\n",
    "---\n",
    "\n",
    "#### **4. 第一层全连接层**\n",
    "```python\n",
    "model.add(Dense(10, activation='relu'))\n",
    "```\n",
    "- **Dense**：全连接层（Fully Connected Layer），每一层的神经元与上一层的所有神经元相连。\n",
    "- **参数解释**：\n",
    "  - `10`：该层有 10 个神经元。\n",
    "  - `activation='relu'`：使用 ReLU 激活函数。\n",
    "\n",
    "---\n",
    "\n",
    "#### **5. 输出层**\n",
    "```python\n",
    "model.add(Dense(1))\n",
    "```\n",
    "- 这是模型的最后一层，通常称为输出层。\n",
    "- **参数解释**：\n",
    "  - `1`：该层只有一个神经元，适用于回归任务（预测连续值）。\n",
    "  - 没有指定激活函数，默认情况下 Dense 层不会应用任何激活函数（相当于线性激活函数）。这在回归任务中是常见的做法。\n",
    "\n",
    "---\n",
    "\n",
    "### **整体网络结构**\n",
    "该模型是一个典型的深度学习网络，适用于时间序列预测或回归任务。以下是网络的结构总结：\n",
    "1. **输入层**：未显式定义，但由第一层 LSTM 的输入形状决定。\n",
    "2. **第一层 LSTM**：捕捉时间序列的短期特征，返回所有时间步的输出。\n",
    "3. **第二层 LSTM**：进一步提取时间序列的长期特征，仅返回最后一个时间步的输出。\n",
    "4. **第一层 Dense**：将 LSTM 提取的特征映射到更高维空间。\n",
    "5. **输出层 Dense**：生成最终的预测值。\n",
    "\n",
    "---\n",
    "\n",
    "### **适用场景**\n",
    "- **时间序列预测**：例如股票价格预测、天气预报等。\n",
    "- **回归任务**：预测连续值的目标变量。\n",
    "\n",
    "---\n",
    "\n",
    "### **注意事项**\n",
    "1. **输入形状**：\n",
    "   - LSTM 层需要三维输入，形状为 `(样本数, 时间步数, 特征数)`。确保输入数据格式正确。\n",
    "   - 示例：如果输入数据是 `(100, 20, 5)`，表示有 100 个样本，每个样本有 20 个时间步，每个时间步有 5 个特征。\n",
    "\n",
    "2. **激活函数选择**：\n",
    "   - 在回归任务中，输出层通常不使用激活函数（线性激活）。\n",
    "   - 如果是分类任务，可以考虑使用 `sigmoid` 或 `softmax` 激活函数。\n",
    "\n",
    "3. **编译模型**：\n",
    "   - 定义好模型后，需要使用 `model.compile()` 方法进行编译，并指定优化器、损失函数和评估指标。\n",
    "   - 示例：\n",
    "     ```python\n",
    "     model.compile(optimizer='adam', loss='mse', metrics=['mae'])\n",
    "     ```\n",
    "\n",
    "4. **训练模型**：\n",
    "   - 使用 `model.fit()` 方法训练模型。\n",
    "   - 示例：\n",
    "     ```python\n",
    "     model.fit(X_train, y_train, epochs=50, batch_size=32, validation_data=(X_val, y_val))\n",
    "     ```\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "keras",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.8.0"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
